package Thread;

public class ThreadDemo19{//存在线程安全问题的代码
    //多个线程同时修改相同的数据 -> 线程安全问题
    private static int count = 0;
    //如果多个线程修改不同的变量此时也不会有问题
    //单个线程修改变量也不会有问题
    private static int count2 = 0;
    public static void main(String[] args) throws InterruptedException {
        Object locker = new Object();
        //创建两个线程每个线程都针对count这个变量循环自增5w次
        //进入{} -> 上锁      出了{} -> 解锁
        Thread t1 = new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                synchronized (locker) {
                        count++;

                }
                //如果多个线程对变量进行读取是不会有线程安全问题的
                // System.out.println(count);
            }
        });
        Thread t2 = new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                synchronized (locker) {
                    count++;
                }

                //count2++;
                //System.out.println(count);
            }
        });
        t1.start();
        t2.start();
        //等待t1、t2结束后再进行打印
        t1.join();
        t2.join();
        System.out.println("count = "+ count);
    }
}
